"""
配置文件
"""

import cv2

# 摄像头配置
CAMERA_CONFIG = {
    'device_id': 0,
    'width': 640,
    'height': 480,
    'fps': 30,
    'auto_exposure': True,
    'exposure_value': -6,
    'brightness': 0.5,
    'contrast': 0.5
}

# MediaPipe Pose 配置
POSE_CONFIG = {
    'static_image_mode': False,
    'model_complexity': 1,
    'smooth_landmarks': True,
    'enable_segmentation': False,
    'smooth_segmentation': True,
    'min_detection_confidence': 0.5,
    'min_tracking_confidence': 0.5
}

# 坐姿评估阈值（精细化版本）
POSTURE_THRESHOLDS = {
    # 头部与桌面距离评估
    'head_distance': {
        'excellent': (80, 100),    # 距离适中
        'good': (60, 80),          # 略有偏差
        'fair': (40, 60),          # 偏差较大
        'poor': (0, 40)            # 距离不当
    },
    
    # 脊柱对齐评估
    'spine_alignment': {
        'excellent': (85, 100),    # 脊柱直立
        'good': (70, 85),          # 轻微弯曲
        'fair': (50, 70),          # 明显弯曲
        'poor': (0, 50)            # 严重弯曲
    },
    
    # 颈椎姿态评估
    'neck_posture': {
        'forward_angle': {
            'excellent': (0, 10),   # 前倾角度小
            'good': (10, 20),       # 轻微前倾
            'fair': (20, 35),       # 明显前倾
            'poor': (35, 90)        # 严重前倾
        },
        'side_tilt': {
            'excellent': (0, 5),    # 侧倾角度小
            'good': (5, 15),        # 轻微侧倾
            'fair': (15, 25),       # 明显侧倾
            'poor': (25, 90)        # 严重侧倾
        },
        'twist_ratio': {
            'excellent': (0, 0.1),  # 扭转程度小
            'good': (0.1, 0.2),     # 轻微扭转
            'fair': (0.2, 0.4),     # 明显扭转
            'poor': (0.4, 1.0)      # 严重扭转
        }
    },
    
    # 肩膀姿态评估
    'shoulder_posture': {
        'height_diff': {
            'excellent': (0, 3),    # 高低差小
            'good': (3, 8),         # 轻微高低差
            'fair': (8, 15),        # 明显高低差
            'poor': (15, 90)        # 严重高低差
        },
        'front_back_diff': {
            'excellent': (0, 10),   # 前后差小
            'good': (10, 25),       # 轻微前后差
            'fair': (25, 50),       # 明显前后差
            'poor': (50, 200)       # 严重前后差
        },
        'narrowing': {
            'excellent': (0, 0.02), # 内收程度小
            'good': (0.02, 0.05),   # 轻微内收
            'fair': (0.05, 0.1),    # 明显内收
            'poor': (0.1, 0.3)      # 严重内收
        },
        'symmetry': {
            'excellent': (80, 100), # 对称性好
            'good': (60, 80),       # 轻微不对称
            'fair': (40, 60),       # 明显不对称
            'poor': (0, 40)         # 严重不对称
        }
    },
    
    # 坐姿稳定性评估
    'sitting_stability': {
        'excellent': (85, 100),    # 稳定性好
        'good': (70, 85),          # 轻微不稳定
        'fair': (50, 70),          # 明显不稳定
        'poor': (0, 50)            # 严重不稳定
    }
}

# 评分权重（精细化版本）
SCORING_WEIGHTS = {
    'head_desk_distance': 0.20,      # 头部与桌面距离 20%
    'spine_alignment': 0.25,         # 脊柱对齐 25%
    'neck_forward_angle': 0.15,      # 脖子前倾 15%
    'neck_side_tilt': 0.10,          # 脖子侧倾 10%
    'neck_twist': 0.05,              # 脖子扭转 5%
    'shoulder_height_diff': 0.10,    # 肩膀高低差 10%
    'shoulder_front_back_diff': 0.05, # 肩膀前后差 5%
    'shoulder_symmetry': 0.05,       # 肩膀对称性 5%
    'sitting_stability': 0.05        # 坐姿稳定性 5%
}

# MediaPipe Pose 关键点映射
POSE_LANDMARKS = {
    'NOSE': 0,
    'LEFT_EYE_INNER': 1,
    'LEFT_EYE': 2,
    'LEFT_EYE_OUTER': 3,
    'RIGHT_EYE_INNER': 4,
    'RIGHT_EYE': 5,
    'RIGHT_EYE_OUTER': 6,
    'LEFT_EAR': 7,
    'RIGHT_EAR': 8,
    'MOUTH_LEFT': 9,
    'MOUTH_RIGHT': 10,
    'LEFT_SHOULDER': 11,
    'RIGHT_SHOULDER': 12,
    'LEFT_ELBOW': 13,
    'RIGHT_ELBOW': 14,
    'LEFT_WRIST': 15,
    'RIGHT_WRIST': 16,
    'LEFT_PINKY': 17,
    'RIGHT_PINKY': 18,
    'LEFT_INDEX': 19,
    'RIGHT_INDEX': 20,
    'LEFT_THUMB': 21,
    'RIGHT_THUMB': 22,
    'LEFT_HIP': 23,
    'RIGHT_HIP': 24,
    'LEFT_KNEE': 25,
    'RIGHT_KNEE': 26,
    'LEFT_ANKLE': 27,
    'RIGHT_ANKLE': 28,
    'LEFT_HEEL': 29,
    'RIGHT_HEEL': 30,
    'LEFT_FOOT_INDEX': 31,
    'RIGHT_FOOT_INDEX': 32
}

# 颜色配置
COLORS = {
    'excellent': (0, 255, 0),      # 绿色
    'good': (0, 200, 255),         # 黄色
    'fair': (0, 165, 255),         # 橙色
    'poor': (0, 0, 255),           # 红色
    'landmarks': (255, 255, 255),  # 白色
    'skeleton': (128, 128, 128),   # 灰色
    'text': (255, 255, 255),       # 白色
    'background': (0, 0, 0)        # 黑色
}

# 显示配置
DISPLAY_CONFIG = {
    'show_landmarks': True,
    'show_skeleton': True,
    'show_metrics': True,
    'show_suggestions': True,
    'font_scale': 0.6,
    'font_thickness': 2,
    'line_thickness': 2,
    'circle_radius': 4,
    'text_padding': 10,
    'metrics_position': (10, 30),
    'suggestions_position': (10, 400)
}

# 坐姿改进建议（精细化版本）
POSTURE_SUGGESTIONS = {
    'head_distance': {
        'too_close': "头部距离桌面过近，请向后调整座椅位置",
        'too_far': "头部距离桌面过远，请向前调整座椅位置",
        'good': "头部与桌面距离适中，保持当前位置"
    },
    
    'spine_alignment': {
        'poor': "脊柱严重弯曲，请挺直背部，调整坐姿",
        'fair': "脊柱有明显弯曲，请注意保持背部挺直",
        'good': "脊柱对齐良好，继续保持"
    },
    
    'neck_posture': {
        'forward_tilt': "脖子过度前倾，请抬起头部，保持颈部自然直立",
        'side_tilt': "脖子向一侧倾斜，请调整头部位置保持平衡",
        'twist': "脖子有扭转，请正视前方，保持头部正直",
        'good': "脖子姿态良好，继续保持"
    },
    
    'shoulder_posture': {
        'height_diff': "双肩高低不平，请调整坐姿使肩膀保持水平",
        'front_back_diff': "肩膀前后位置不一致，请调整坐姿保持对称",
        'narrowing': "肩膀过度内收，请放松肩膀，自然下垂",
        'asymmetry': "肩膀不对称，请调整坐姿保持平衡",
        'good': "肩膀姿态良好，继续保持"
    },
    
    'sitting_stability': {
        'unstable': "坐姿重心不稳，请调整坐姿保持身体平衡",
        'good': "坐姿稳定性良好，继续保持"
    },
    
    'general': {
        'excellent': "坐姿优秀，继续保持！",
        'good': "坐姿良好，稍作调整会更好",
        'fair': "坐姿一般，请注意以上建议进行改善",
        'poor': "坐姿较差，请认真对待以上建议"
    }
}

# 检测参数
DETECTION_CONFIG = {
    'min_confidence': 0.5,
    'smoothing_window': 10,
    'alert_threshold': 60,
    'alert_duration': 3,
    'save_interval': 60,
    'max_missing_frames': 30
}

# 文件路径配置
FILE_CONFIG = {
    'log_dir': 'logs',
    'data_dir': 'data',
    'model_dir': 'models',
    'output_dir': 'output'
} 